package com.sort;

import java.util.Arrays;

/**
 * 插入排序：时间复杂度O(n*n)，空间复杂度O(1)，稳定
 *
 * 1.从第一个元素开始，该元素可以认为已经被排序；
 * 2.取出下一个元素，在已经排序的元素序列中从后向前扫描；
 * 3.如果该元素（已排序）大于新元素，将该元素移到下一位置；
 * 4.重复步骤3，直到找到已排序的元素小于或者等于新元素的位置；
 * 5.将新元素插入到该位置后；
 * 6.重复步骤2~5。
 *
 * @author: keluosi@bicitech.cn
 * @review:
 * @date: 2018/9/28
 */
public class InsertionSort {
    public static void sort(int[] a) {
        for (int i = 1; i < a.length; i++) {
            int temp = a[i];
            int index = i - 1;
            while (index >= 0 && temp < a[index]) {
                a[index + 1] = a[index];
                index--;
            }
            a[index + 1] = temp;
        }
    }

    public static void main(String[] args) {
        int[] a = {3, 2, 5, 4, 1, 7, 9, 6, 3};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
}
